/* 这个 index.js 文件相当于是 Socket 通信时的服务端 */

// 创建 Express 应用
const app = require('express')()
// 基于 Express 应用创建HTTP服务器
const http = require('http').createServer(app)
// 基于 http 服务器 Server 对象， 创建服务端 Socket 对象
var io = require('socket.io')(http);

// 注册 connection 事件监听，等待客户端连接
// 当有客户端连接到服务端，则执行回调函数
io.on('connection', (socket) => {
  console.log('a user connected')
  // 服务端向客户端发送消息
  socket.emit('to-client', '欢迎您的登录。。。。')
  // 注册自定义事件，用于接收从客户端发送的消息
  socket.on('to-server', (msg) => {
    console.log('message: ' + msg)
    io.emit('to-client', `${ipAddress}发送的消息: ${msg}` + msg)
  })
  // 客户端断开连接时 触发 disconnect 事件函数执行
  socket.on('disconnect', () => {
    console.log('user disconnected')
  })
})
// 获取当前机器的ip地址
const os = require('os')

function getIpAddress () {
  const ifaces=os.networkInterfaces()

  for (let dev in ifaces) {
    let iface = ifaces[dev]

    for (let i = 0; i < iface.length; i++) {
      let {family, address, internal} = iface[i]

      if (family === 'IPv4' && address !== '127.0.0.1' && !internal) {
        return address
      }
    }
  }
}
let ipAddress = getIpAddress()
console.log(ipAddress)
// 路由
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html')
})

// 监听 3000 端口
http.listen(3000, () => {
  console.log('listening on *:3000')
})